package org.fioma.tree.suffixTree.memory;

import org.fioma.tree.Label;
import org.fioma.tree.suffixTree.SuffixNodeFactory;

public interface SuffixNodeFactoryMemory<L extends Label<L>, I extends InternalSuffixNodeMemory<L, I, F>, F extends LeafSuffixNodeMemory<L, I, F>> extends
		SuffixNodeFactory<L, I, F> {

	public SuffixNodeMemory<L, I, F> getNode(long pos);

	public SuffixNodeMemory<L, I, F>[] getChilds(long pos);

	public SuffixNodeMemory<L, I, F> getChild(long pos, byte letter);

	public void setChild(long pos, byte letter, SuffixNodeMemory<L, I, F> child);

	public L getLabel(long pos);

	public void setLabel(long pos, L label);

	public I getParent(long pos);

	public void setParent(long pos, I parent);

	public long allocMemoryInternalNode();

	public long allocMemoryLeafNode();

}
